# Copyright (c) 2016 Lucky Byte, Inc.
#
# Summary : 系统数据库备份(全量)
#
# Author : xiaohu <xiaohu@lucky-byte.com>
# Since  : 2016.3.1
#
# History
#  2016.03.01 : 建立此文件
#  2016.03.02 : 备份文件名添加后缀，使用 gzip 压缩数据文件
#               修改备份目录的所有者为 postgres
#

#
# 运行此文件需要系统权限
#
# 请将此文件放入系统 crontab 中, 例如:
#
# 每周二晚上23:50分备份数据库
# 50 23   * * tue root    sh /opt/yins/pgsql/backup.sh > /opt/backup/pgsql.backup.err 2>&1
#

# postgresql.conf 配置:
#   wal_level = archive
#   archive_mode = on
#   archive_command = 'sh /opt/yins/pgsql/archive_command.sh %p %f'
#
# PostgreSQL 数据库文件路径及目录名，不同系统/不同版本会有区别
#
# pgsql_path="/var/lib/postgresql/9.3/main"    # pgsql 9.3 on Ubuntu 14.04
pgsql_path="/var/lib/pgsql/9.5/data"       # pgsql 9.5 on Redhat 6.5

# 通过日期选择备份路径
#
today=`date +%Y%m%d`

echo "Start at $today `date +%H%M%S` ..."
echo "========================================"
echo ""

backdir="/opt/backup/pgsql/`date +%Y%m`"
mkdir -p ${backdir}
chmod 700 ${backdir}
chown -R postgres:postgres /opt/backup/pgsql

# 通过 pg_dumpall 输出数据库到单个文件中
#
dump_file="db_dump_${today}.gz"
dump_path="${backdir}/${dump_file}"
pg_dumpall -U postgres | gzip > ${dump_path}

# 备份数据库文件以及数据库操作日志
# http://www.postgresql.org/docs/9.5/static/continuous-archiving.html
#
data_file="db_data_${today}.tar.gz"
data_path="${backdir}/${data_file}"

psql -U postgres -c "SELECT pg_start_backup('hot_backup');"
tar -czf ${data_path} ${pgsql_path}
psql -U postgres -c "SELECT pg_stop_backup();"

echo "Done!"
echo "========================================"
echo ""

exit 0
